<!doctype html>
<html class="default no-js">
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<title>lin-mizar</title>
	<meta name="description" content="">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<link rel="stylesheet" href="assets/css/main.css">
</head>
<body>
<header>
	<div class="tsd-page-toolbar">
		<div class="container">
			<div class="table-wrap">
				<div class="table-cell" id="tsd-search" data-index="assets/js/search.js" data-base=".">
					<div class="field">
						<label for="tsd-search-field" class="tsd-widget search no-caption">Search</label>
						<input id="tsd-search-field" type="text" />
					</div>
					<ul class="results">
						<li class="state loading">Preparing search index...</li>
						<li class="state failure">The search index is not available</li>
					</ul>
					<a href="index.html" class="title">lin-mizar</a>
				</div>
				<div class="table-cell" id="tsd-widgets">
					<div id="tsd-filter">
						<a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a>
						<div class="tsd-filter-group">
							<div class="tsd-select" id="tsd-filter-visibility">
								<span class="tsd-select-label">All</span>
								<ul class="tsd-select-list">
									<li data-value="public">Public</li>
									<li data-value="protected">Public/Protected</li>
									<li data-value="private" class="selected">All</li>
								</ul>
							</div>
							<input type="checkbox" id="tsd-filter-inherited" checked />
							<label class="tsd-widget" for="tsd-filter-inherited">Inherited</label>
							<input type="checkbox" id="tsd-filter-externals" checked />
							<label class="tsd-widget" for="tsd-filter-externals">Externals</label>
							<input type="checkbox" id="tsd-filter-only-exported" />
							<label class="tsd-widget" for="tsd-filter-only-exported">Only exported</label>
						</div>
					</div>
					<a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a>
				</div>
			</div>
		</div>
	</div>
	<div class="tsd-page-title">
		<div class="container">
			<ul class="tsd-breadcrumb">
				<li>
					<a href="globals.html">Globals</a>
				</li>
			</ul>
			<h1>lin-mizar</h1>
		</div>
	</div>
</header>
<div class="container container-main">
	<div class="row">
		<div class="col-8 col-content">
			<div class="tsd-panel tsd-typography">
				<h1 align="center">
					<a href="http://doc.cms.7yue.pro/">
					<img src="http://doc.cms.7yue.pro/left-logo.png" width="250"/></a>
					<br>
					Lin-CMS-Koa-Core
				</h1>
				<h4 align="center">一个简单易用的CMS后端项目 | <a href="http://doc.cms.7yue.pro/" target="_blank">Lin-CMS-Koa的核心库</a></h4>
				<p align="center">
					<a href="http://flask.pocoo.org/docs/1.0/" rel="nofollow">
					<img src="https://img.shields.io/badge/koa-2.7.0-green.svg" alt="flask version" data-canonical-src="https://img.shields.io/badge/koa-2.7.0-green.svg" style="max-width:100%;"></a>
					<a href="http://doc.cms.7yue.pro/" rel="nofollow"><img src="https://img.shields.io/badge/license-MIT-lightgrey.svg" alt="LISENCE" data-canonical-src="https://img.shields.io/badge/license-MIT-lightgrey.svg" style="max-width:100%;"></a>
				</p>
				<blockquote align="center">
					<em>Lin-CMS</em> 是林间有风团队经过大量项目实践所提炼出的一套<strong>内容管理系统框架</strong>。<br>
					Lin-CMS 可以有效的帮助开发者提高 CMS 的开发效率。
				</blockquote>
				<p align="center">
					<a href="#简介">简介</a>&nbsp;|&nbsp;<a href="#快速开始">快速开始</a>&nbsp;|&nbsp;<a href="#下个版本开发计划">下个版本开发计划</a>
				</p>
				<a href="#简介" id="简介" style="color: inherit; text-decoration: none;">
					<h2>简介</h2>
				</a>
				<a href="#什么是-lin-cms？" id="什么是-lin-cms？" style="color: inherit; text-decoration: none;">
					<h3>什么是 Lin CMS？</h3>
				</a>
				<p>Lin-CMS 是林间有风团队经过大量项目实践所提炼出的一套<strong>内容管理系统框
				架</strong>。Lin-CMS 可以有效的帮助开发者提高 CMS 的开发效率。</p>
				<a href="#起步项目" id="起步项目" style="color: inherit; text-decoration: none;">
					<h3>起步项目</h3>
				</a>
				<p><a href="https://github.com/TaleLin/lin-cms-koa">https://github.com/TaleLin/lin-cms-koa</a></p>
				<a href="#文档地址" id="文档地址" style="color: inherit; text-decoration: none;">
					<h3>文档地址</h3>
				</a>
				<p><a href="http://doc.cms.7yue.pro/">http://doc.cms.7yue.pro/</a></p>
				<a href="#线上-demo" id="线上-demo" style="color: inherit; text-decoration: none;">
					<h3>线上 demo</h3>
				</a>
				<p><a href="http://face.cms.7yue.pro/">http://face.cms.7yue.pro/</a></p>
				<a href="#qq-交流群" id="qq-交流群" style="color: inherit; text-decoration: none;">
					<h3>QQ 交流群</h3>
				</a>
				<p>QQ 群号：643205479</p>
				<img class="QR-img" width="258" height="300" src="https://camo.githubusercontent.com/facc358629410637480581abcdf8ec1ceb8c7161/687474703a2f2f696d676c66332e6e6f73646e302e3132362e6e65742f696d672f516b354c576b4a56576b46334e6d6479633278476355745363454a4c4f565631636c45725931644a613046735133453161445a51576c5a485a3264436253743457584131563364525054302e6a70673f696d61676556696577267468756d626e61696c3d313638307830267175616c6974793d39362673747269706d6574613d3026747970653d6a7067">
				<a href="#微信公众号" id="微信公众号" style="color: inherit; text-decoration: none;">
					<h3>微信公众号</h3>
				</a>
				<p>微信搜索：林间有风</p>
				<img class="QR-img" src="http://imglf6.nosdn0.126.net/img/YUdIR2E3ME5weEdlNThuRmI4TFh3UWhiNmladWVoaTlXUXpicEFPa1F6czFNYkdmcWRIbGRRPT0.jpg?imageView&thumbnail=500x0&quality=96&stripmeta=0&type=jpg">
				<a href="#版本日志" id="版本日志" style="color: inherit; text-decoration: none;">
					<h2>版本日志</h2>
				</a>
				<p>最新版本：<code>0.3.0</code></p>
				<a href="#030" id="030" style="color: inherit; text-decoration: none;">
					<h3>0.3.0</h3>
				</a>
				<ol>
					<li><code>A</code> 抽离 model 层</li>
				</ol>
				<a href="#lin-cms-的特点" id="lin-cms-的特点" style="color: inherit; text-decoration: none;">
					<h2>Lin CMS 的特点</h2>
				</a>
				<p>Lin CMS 的构筑思想是有其自身特点的。下面我们阐述一些 Lin 的主要特点。</p>
				<a href="#lin-cms-是一个前后端分离的-cms-解决方案" id="lin-cms-是一个前后端分离的-cms-解决方案" style="color: inherit; text-decoration: none;">
					<h4>Lin CMS 是一个前后端分离的 CMS 解决方案</h4>
				</a>
				<p>这意味着，Lin 既提供后台的支撑，也有一套对应的前端系统，当然双端分离的好处不仅仅
					在于此，我们会在后续提供<code>NodeJS</code>和<code>PHP</code>版本的 Lin。如果你心仪 Lin，却又因为技术
					栈的原因无法即可使用，没关系，我们会在后续提供更多的语言版本。为什么 Lin 要选择
				前后端分离的单页面架构呢？</p>
				<p>首先，传统的网站开发更多的是采用服务端渲染的方式，需用使用一种模板语言在服务端完
					成页面渲染：比如 JinJa2、Jade 等。服务端渲染的好处在于可以比较好的支持 SEO，但作
				为内部使用的 CMS 管理系统，SEO 并不重要。</p>
				<p>但一个不可忽视的事实是，服务器渲染的页面到底是由前端开发者来完成，还是由服务器开
					发者来完成？其实都不太合适。现在已经没有多少前端开发者是了解这些服务端模板语言的
					，而服务器开发者本身是不太擅长开发页面的。那还是分开吧，前端用最熟悉的 Vue 写 JS
				和 CSS，而服务器只关注自己的 API 即可。</p>
				<p>其次，单页面应用程序的体验本身就要好于传统网站。</p>
				<a href="#框架本身已内置了-cms-常用的功能" id="框架本身已内置了-cms-常用的功能" style="color: inherit; text-decoration: none;">
					<h4>框架本身已内置了 CMS 常用的功能</h4>
				</a>
				<p>Lin 已经内置了 CMS 中最为常见的需求：用户管理、权限管理、日志系统等。开发者只需
				要集中精力开发自己的 CMS 业务即可</p>
				<a href="#lin-cms-本身也是一套开发规范" id="lin-cms-本身也是一套开发规范" style="color: inherit; text-decoration: none;">
					<h4>Lin CMS 本身也是一套开发规范</h4>
				</a>
				<p>Lin CMS 除了内置常见的功能外，还提供了一套开发规范与工具类。换句话说，开发者无需
					再纠结如何验证参数？如何操作数据库？如何做全局的异常处理？API 的结构如何？前端结
					构应该如何组织？这些问题 Lin CMS 已经给出了解决方案。当然，如果你不喜欢 Lin 给出
					的架构，那么自己去实现自己的 CMS 架构也是可以的。但通常情况下，你确实无需再做出
				架构上的改动，Lin 可以满足绝大多数中小型的 CMS 需求。</p>
				<p>举例来说，每个 API 都需要校验客户端传递的参数。但校验的方法有很多种，不同的开发
					者会有不同的构筑方案。但 Lin 提供了一套验证机制，开发者无需再纠结如何校验参数，
				只需模仿 Lin 的校验方案去写自己的业务即可。</p>
				<p>还是基于这样的一个原则：Lin CMS 只需要开发者关注自己的业务开发，它已经内置了很多
				机制帮助开发者快速开发自己的业务。</p>
				<a href="#基于插件的扩展" id="基于插件的扩展" style="color: inherit; text-decoration: none;">
					<h4>基于插件的扩展</h4>
				</a>
				<p>任何优秀的框架都需要考虑到扩展。而 Lin 的扩展支持是通过插件的思想来设计的。当你
					需要新增一个功能时，你既可以直接在 Lin 的目录下编写代码，也可以将功能以插件的形
					式封装。比如，你开发了一个文章管理功能，你可以选择以插件的形式来发布，这样其他开
					发者通过安装你的插件就可以使用这个功能了。毫无疑问，以插件的形式封装功能将最大化
					代码的可复用性。你甚至可以把自己开发的插件发布，以提供给其他开发者使用。这种机制
				相当的棒。</p>
				<a href="#前端组件库支持" id="前端组件库支持" style="color: inherit; text-decoration: none;">
					<h4>前端组件库支持</h4>
				</a>
				<p>Lin 还将提供一套类似于 Vue Element 的前端组件库，以方便前端开发者快速开发。相比
					于 Vue Element 或 iView 等成熟的组件库，Lin 所提供的组件库将针对 Lin CMS 的整体
					设计风格、交互体验等作出大量的优化，使用 Lin 的组件库将更容易开发出体验更好的
					CMS 系统。当然，Lin 本身不限制开发者选用任何的组件库，你完全可以根据自己的喜好/
					习惯/熟悉度，去选择任意的一个基于 Vue 的组件库，比如前面提到的 Vue Element 和
				iView 等。你甚至可以混搭使用。当然，前提是这些组件库是基于 Vue 的。</p>
				<a href="#完善的文档" id="完善的文档" style="color: inherit; text-decoration: none;">
					<h4>完善的文档</h4>
				</a>
				<p>我们将提供详尽的文档来帮助开发者使用 Lin</p>
			</div>
		</div>
		<div class="col-4 col-menu menu-sticky-wrap menu-highlight">
			<nav class="tsd-navigation primary">
				<ul>
					<li class="globals  ">
						<a href="globals.html"><em>Globals</em></a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_config___test___config_spec_.html">&quot;config/__test__/config.spec&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_config_config_.html">&quot;config/config&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_config_index_.html">&quot;config/index&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_core__.html">&quot;core.&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_encrypt_index_.html">&quot;encrypt/index&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_encrypt_password_hash_.html">&quot;encrypt/password-<wbr>hash&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_exception_http_exception_.html">&quot;exception/http-<wbr>exception&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_exception_index_.html">&quot;exception/index&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_extend_index_.html">&quot;extend/index&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_extend_json_.html">&quot;extend/json&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_extend_logging_.html">&quot;extend/logging&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_extend_multipart_.html">&quot;extend/multipart&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_extend_success_.html">&quot;extend/success&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_file_index_.html">&quot;file/index&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_index_.html">&quot;index&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_interface_index_.html">&quot;interface/index&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_jwt_index_.html">&quot;jwt/index&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_jwt_jwt_.html">&quot;jwt/jwt&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_loader_index_.html">&quot;loader/index&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_logger_console_.html">&quot;logger/console&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_logger_file_.html">&quot;logger/file&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_logger_format_.html">&quot;logger/format&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_logger_index_.html">&quot;logger/index&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_middleware___test___error_spec_.html">&quot;middleware/__test__/error.spec&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_middleware_error_.html">&quot;middleware/error&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_middleware_index_.html">&quot;middleware/index&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_middleware_log_.html">&quot;middleware/log&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_plugin_index_.html">&quot;plugin/index&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_router_index_.html">&quot;router/index&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_types_index_.html">&quot;types/index&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_utils_enums_.html">&quot;utils/enums&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_utils_index_.html">&quot;utils/index&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_utils_mock_context_.html">&quot;utils/mock-<wbr>context&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_utils_util_.html">&quot;utils/util&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_validator_extended_validator_.html">&quot;validator/extended-<wbr>validator&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_validator_index_.html">&quot;validator/index&quot;</a>
					</li>
					<li class=" tsd-kind-external-module">
						<a href="modules/_validator_lin_validator_.html">&quot;validator/lin-<wbr>validator&quot;</a>
					</li>
				</ul>
			</nav>
			<nav class="tsd-navigation secondary menu-sticky">
				<ul class="before-current">
				</ul>
			</nav>
		</div>
	</div>
</div>
<footer class="with-border-bottom">
	<div class="container">
		<h2>Legend</h2>
		<div class="tsd-legend-group">
			<ul class="tsd-legend">
				<li class="tsd-kind-module"><span class="tsd-kind-icon">Module</span></li>
				<li class="tsd-kind-object-literal"><span class="tsd-kind-icon">Object literal</span></li>
				<li class="tsd-kind-variable"><span class="tsd-kind-icon">Variable</span></li>
				<li class="tsd-kind-function"><span class="tsd-kind-icon">Function</span></li>
				<li class="tsd-kind-function tsd-has-type-parameter"><span class="tsd-kind-icon">Function with type parameter</span></li>
				<li class="tsd-kind-index-signature"><span class="tsd-kind-icon">Index signature</span></li>
				<li class="tsd-kind-type-alias"><span class="tsd-kind-icon">Type alias</span></li>
				<li class="tsd-kind-type-alias tsd-has-type-parameter"><span class="tsd-kind-icon">Type alias with type parameter</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-enum"><span class="tsd-kind-icon">Enumeration</span></li>
				<li class="tsd-kind-enum-member"><span class="tsd-kind-icon">Enumeration member</span></li>
				<li class="tsd-kind-property tsd-parent-kind-enum"><span class="tsd-kind-icon">Property</span></li>
				<li class="tsd-kind-method tsd-parent-kind-enum"><span class="tsd-kind-icon">Method</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-interface"><span class="tsd-kind-icon">Interface</span></li>
				<li class="tsd-kind-interface tsd-has-type-parameter"><span class="tsd-kind-icon">Interface with type parameter</span></li>
				<li class="tsd-kind-constructor tsd-parent-kind-interface"><span class="tsd-kind-icon">Constructor</span></li>
				<li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li>
				<li class="tsd-kind-method tsd-parent-kind-interface"><span class="tsd-kind-icon">Method</span></li>
				<li class="tsd-kind-index-signature tsd-parent-kind-interface"><span class="tsd-kind-icon">Index signature</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-class"><span class="tsd-kind-icon">Class</span></li>
				<li class="tsd-kind-class tsd-has-type-parameter"><span class="tsd-kind-icon">Class with type parameter</span></li>
				<li class="tsd-kind-constructor tsd-parent-kind-class"><span class="tsd-kind-icon">Constructor</span></li>
				<li class="tsd-kind-property tsd-parent-kind-class"><span class="tsd-kind-icon">Property</span></li>
				<li class="tsd-kind-method tsd-parent-kind-class"><span class="tsd-kind-icon">Method</span></li>
				<li class="tsd-kind-accessor tsd-parent-kind-class"><span class="tsd-kind-icon">Accessor</span></li>
				<li class="tsd-kind-index-signature tsd-parent-kind-class"><span class="tsd-kind-icon">Index signature</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-constructor tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited constructor</span></li>
				<li class="tsd-kind-property tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited property</span></li>
				<li class="tsd-kind-method tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited method</span></li>
				<li class="tsd-kind-accessor tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited accessor</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-property tsd-parent-kind-class tsd-is-protected"><span class="tsd-kind-icon">Protected property</span></li>
				<li class="tsd-kind-method tsd-parent-kind-class tsd-is-protected"><span class="tsd-kind-icon">Protected method</span></li>
				<li class="tsd-kind-accessor tsd-parent-kind-class tsd-is-protected"><span class="tsd-kind-icon">Protected accessor</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-property tsd-parent-kind-class tsd-is-private"><span class="tsd-kind-icon">Private property</span></li>
				<li class="tsd-kind-method tsd-parent-kind-class tsd-is-private"><span class="tsd-kind-icon">Private method</span></li>
				<li class="tsd-kind-accessor tsd-parent-kind-class tsd-is-private"><span class="tsd-kind-icon">Private accessor</span></li>
			</ul>
			<ul class="tsd-legend">
				<li class="tsd-kind-property tsd-parent-kind-class tsd-is-static"><span class="tsd-kind-icon">Static property</span></li>
				<li class="tsd-kind-call-signature tsd-parent-kind-class tsd-is-static"><span class="tsd-kind-icon">Static method</span></li>
			</ul>
		</div>
	</div>
</footer>
<div class="container tsd-generator">
	<p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p>
</div>
<div class="overlay"></div>
<script src="assets/js/main.js"></script>
<script>if (location.protocol == 'file:') document.write('<script src="assets/js/search.js"><' + '/script>');</script>
</body>
</html>